perm filename SPSUB.REG[UP,DOC]3 blob sn#323799 filedate 1977-12-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002				18 JULY 1972
C00016 ENDMK
C⊗;
			18 JULY 1972

		     Updated 22 Dec 1977

The following reports a new family of subroutines available in LIB40.


These subroutines are for people who want to be able to spool  output
to the LPT or XGP from their programs without going up to the monitor
and running SPOOL or XSPOOL.  Each  of these routines will cause  one
file to be spooled.

Four routines are available for each  device (LPT and XGP); one  each
for SAIL, machine language, and FORTRAN, and one for machine language
which allows full access to all spooler features.

---------------------------------------------------------------------

For SAIL programs:   These routines  are called by  the SAIL  calling
sequence:

	PUSH	16,SD1		;SAIL FORMAT STRING DESCRIPTOR-1
	PUSH	16,SD2		;SAIL FORMAT STRING DESCRIPTOR-2
	PUSH	17,IOCHAN
	PUSH	17,FLAGS
	PUSHJ	17,SPOOL	;for LPT

	PUSH	16,SD1		;SAIL FORMAT STRING DESCRIPTOR-1
	PUSH	16,SD2		;SAIL FORMAT STRING DESCRIPTOR-2
	PUSH	17,IOCHAN
	PUSH	17,FLAGS
	PUSHJ	17,XSPOOL	;for XGP

Which corresponds πo the Sail statements:

EXTERNAL PROCEDURE SPOOL(STRING S;  INTEGER IOCHAN,FLAGS);
EXTERNAL PROCEDURE XSPOOL(STRING S;  INTEGER IOCHAN,FLAGS);

	...

	SPOOL("FOO.DAT[1,FOO]",4,'21);		COMMENT for LPT;

	XSPOOL("FOO.DAT[1,FOO]",4,'21);		COMMENT for XGP;

The  parameter  IOCHAN is used to select which channel the subroutine
is going to use for its output activity.  The channel  selected  will
be  released by this routine before it returns, hence the user should
select a channel on which there is no other IO activity.

---------------------------------------------------------------------

For FAIL and Macro programs the calling sequence is:

	EXTERN	SPOOLM,SPL%CN,XSPLM,XSP%FT
	...

	PUSHJ	17,SPOOLM		;For LPT spooling
	JUMP	ARGS

	PUSHJ	17,XSPLM		;For XGP spooling
	JUMP	ARGS

where ARGS is the address  of a four word  lookup block that has  the
appropriate flags in the right half of ARGS+1. The IO channel that is
used may be selected by setting the external variable SPL%CN to  some
number which will  be used (mod  20 octal) as  the channel number  to
use.  The default is  channel 17.  The font  used in spooling on  the
XGP may  be  specified by  putting  the  sixbit font  name  into  the
external variable XSP%FT.   The default is  the system default  font.
The address of ARGS may be anywhere in your core, except that if  you
use the accumulators for ARGS, then  ARGS must be smaller than 14  so
that  all  four  words  will  fit  beneath  17.   As  a   programming
convenience, all accumulators  will be  restored by  this routine  to
their original values.

---------------------------------------------------------------------

For Fortran programmers we offer:

	CALL  SPOOLF(FILE,EXT,FLAGS)

for LPT spooling, and

	CALL  XSPLF(FILE,EXT,FLAGS)

for XGP spooling.  FILE should contain an ascii string of up to  five
letters used to specify the  file name, and EXT  may contain up to  3
ascii letters  used  to specify  the  file extension.   Your  project
programmer number will be assumed.

---------------------------------------------------------------------

For users who want all possible features:

	EXTERN	SPALL,SPL%CN,XSPALL,XSP%FT

	PUSHJ	17,SPALL	;For LPT spooling
	JUMP	ARGS

	PUSHJ	17,XSPALL	;For XGP spooling
	JUMP	ARGS

ARGS is the name (address) of an array containing at least 21 (octal)
words with the following data:

WORD NUMBER	SYMBOLIC NAME	DATA SUPPLIED BY USER
(octal)

0		CFORM		0 - DATA IS SET BY SPALL
1		RQNAM		0 
2		RQJOB		0 
3		FDEV		NAME OF SOURCE DEVICE, IN SIXBIT
4		DEVMOD		IO MODE FOR SOURCE DEVICE
5		FSIZE		0
6		RQTIME		XWD DATE,TIME IN MINUTES, SEE BELOW
7		FNAME		SIXBIT FILE NAME OF ACTUAL SOURCE
10		FEXT		SIXBIT FILE EXTENSION OF SOURCE
11		FDAT		0
12		FPPN		SIXBIT PPN OF FILE, IF NEEDED.
13		ANAME		ALIAS NAME IN SIXBIT
14		AEXT		ALIAS EXTENSION IN SIXBIT
15		APPN		ALIAS PPN IN SIXBIT
16		CBITS		FLAG BITS IN RIGHT SIDE (SEE BELOW),
				INITIAL PSEUDO-PAGE NUMBER IN LEFT.
17		CREP		XWD COMMAND REPEAT,LINE SPACE FACTOR
20		PSPEC		PAGE RANGE LIST

Notes:

If FPPN is 0, the PPN of the requestor (you) is used.  

If  FDEV is zero, device DSK will be assumed.  DEVMOD = 0 corresponds
to ascii character mode on the disk.

Headings  on the listing will use the ALIAS file name, extension, and
ppn, if these are non-zero. (Caution: if the desired alias  extension
is zero, set the right half of AEXT to non zero).

RQTIME: if the date and time specified is in the  future the  listing
will not be started before that time.  If this time is already  past,
(zero is past) this will be set to the current time.

FLAG BITS are defined in the section labeled "All programs".

COMMAND REPEAT is the number of times the file  will  be  listed,  (0
means once).

LINE SPACE FACTOR is the number of EXTRA line feeds per line feed. If
this  is  0 you get normal single spacing; 1 makes double spacing. If
bit 18 (400000 in the right half) is on, then  the  listing  will  be
single spaced with NO FORM FEED between pages.

PSPEC is the page (in octal mode, the word) range  specification.  If
PSPEC  is 0, the entire file will be listed. Otherwise, PSPEC and all
the non-zero words following it  will  be  used  as  the  page  bound
limits.   Only  pages  included  in  the range will be listed. A page
bound term has the form:
	XWD	 LOW BOUND,HIGH BOUND.

The number of page bound terms must be less than 160 (octal).

This subroutine will preserve all accumulators.  It uses one software
io channel, usually channel 17, but this can be  changed  by  storing
the channel to use in SPL%CN.

The font used in spooling on the XGP may be specified by putting  the
sixbit font name into the  external variable XSP%FT.  The default  is
the system default font.

---------------------------------------------------------------------

All programs:

The flags have the following significance:

Octal	Bit		Meaning
1	(bit 35)	delete this file after listing
2	(bit 34)	do fortran carriage control
4	(bit 33)	use LPT mode 101 instead of mode 1.
10	(bit 32)	delete SOS line numbers
20	(bit 31)	print headings at the top of each page
40	(bit 30)	suppress the title page.
100	(bit 29)	make narrow title page for 8.5" paper
200	(bit 28)	list data as octal words.
400	(bit 27)	suppress message announcing "spooling done"
1000	(bit 26)	convert all line feeds to '177&'21.


The total effect of the flags is determined  by  the  logical  or  of
their  values.  For  example  a  flag value of '21 means to list with
headings at the top of each page and delete the file after spooling.



	The following three programs are examples of the use of this
subroutine.

SAIL EXAMPLE:

BEGIN "TEST OF SPOOLER SUBROUTINE"
EXTERNAL PROCEDURE SPOOL(STRING S; INTEGER IOCHAN,FLAG);
SPOOL("PROG.SAI[1,REG]",'17,'60);
END "TEST OF SPOOLER SUBROUTINE"


FORTRAN EXAMPLE:

	CALL SPOOLF('FPROG','F4',"20)
	END


FAIL EXAMPLE:


	TITLE TRY THE SPOOLER SUBROUTINE
	EXTERN	SPOOLM,SPL%CN
	P←17
STRT:	CALL	['RESET ']
	MOVEI	5
	MOVEM	SPL%CN
	MOVE	P,[IOWD PDLEN,PDLIST]
	PUSHJ	P,SPOOLM
	JUMP	[SIXBIT/MPROG/
		XWD 'FAI',20
		0
		SIXBIT/  1REG/]
	CALL	['EXIT  ']
PDLEN←←10
PDLIST: BLOCK PDLEN
	END	STRT


----------------------------------------------------------------------

Example of the use of SPALL and XSPALL, the general spooling subroutines:

	TITLE	ALLTST - TEST SPALL AND XSPALL SUBROUTINES
A←1
P←17
PDLEN←20
	EXTERN	SPALL,XSPALL,XSP%FT
STRT:	RESET
	MOVE	P,[IOWD PDLEN,PDLIST]
	PUSHJ	P,SPALL			;Spool on LPT
	JUMP	PARAMS

	MOVE	A,['FIX20 ']
	MOVEM	A,XSP%FT
	PUSHJ	P,XSPALL		;Now spool on XGP in FIX20
	JUMP	PARAMS
	EXIT

PDLIST:	BLOCK	PDLEN
PARAMS:	0		;CFORM
	0		;RQNAM
	0		;RQJOB
	0		;FDEV 	DSK IS DEFAULT
	0		;DEVMOD	MODE 0 IS ASCII SINGLE CHARACTER
	0		;FSIZE
	0		;RQTIME
	'ALLTST'	;FNAME
	0		;FEXT
	0		;FDAT
	0		;FPPN
	'ALIAS '	;ANAME	ALIAS NAME
	'RPG   '	;AEXT
	'FOOBAZ'	;APPN	ALIAS PPN
	110		;CBITS	NARROW TITLE AND NO SOS NUMBERS
	2,,0		;CREP	2 COPIES OF THE FILE
	0		;PSPEC	LIST THE ENTIRE FILE

	END 	STRT